package maquina.modelol.elector;

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;


public class Repositorio{
	
	List<Categoria> categorias;
	
	public static class ExcepcionCargaCandidatos extends Exception {

		private static final long serialVersionUID = -4385529727145647L;

		public ExcepcionCargaCandidatos(Exception causa){
			
			super(causa);
		}
		
		public ExcepcionCargaCandidatos(String mensaje, Exception causa){
		
			super(mensaje, causa);
		}
	}
	
	public Repositorio(String[] rutas) throws ExcepcionCargaCandidatos{
		
		categorias = new ArrayList<Categoria>();
		
		try {
			
			for(String rutaCategoria: rutas){
		
				List<String> lineas = leerArchivo(rutaCategoria);
				
				String nombreCategoria = null;
				
				List<Candidato> candidatos = null;
				
				if( lineas.size() > 5 ){
					
					nombreCategoria = lineas.get(0);
					
					candidatos = new ArrayList<Candidato>();
					
					for(int i = 1; i + 1 < lineas.size(); i+= 3){
						
						String imagen = lineas.get(i+1);
						
						String imagenContraste = lineas.get(i+2);
						
						if(imagen.equals("")){
							
							imagen = null;
						}
					
						Candidato candidato = new Candidato(lineas.get(i), imagen, imagenContraste);
						
						candidatos.add(candidato);
					}
				}
				 
				categorias.add(new Categoria(nombreCategoria, candidatos));
			}
		} catch (Exception e) {
			
			throw new ExcepcionCargaCandidatos(e);
		}	
	}
	
	private List<String> leerArchivo(String str) throws Exception{
		
		FileReader fr = new FileReader(str);
		
		BufferedReader entrada = new BufferedReader(fr);
	
		List<String> lines = new ArrayList<String>();
	
		String line;
	
		while((line = entrada.readLine()) != null ){
		
			lines.add(line);
		}
		
		return lines;
	}

	public List<Categoria> getCategorias(){
		
		return categorias;
	}
	
	public Categoria getCategoria(String nombre){
		
		Categoria categoria = null;
		
		int i = 0;
		
		while ( i < categorias.size() && categoria == null){
			
			if(categorias.get(i).getNombre().equals(nombre)){
				
				categoria = categorias.get(i);
			}
			else {
				i++;
			}
		}
		
		if(categoria != null){
		
			return categoria;
		}
		else{
			throw new IllegalArgumentException("Categoria no valida");
		}
	}
	
	public String toString(){
		
		return String.valueOf(getCategorias());
	}
}
